package pe.edu.upc.dreamteam.dao;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;

import javax.sql.DataSource;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.simple.SimpleJdbcDaoSupport;
import org.springframework.stereotype.Repository;

import pe.edu.upc.dreamteam.bean.Promocion;

@Repository
public class PromocionDAOImpl extends SimpleJdbcDaoSupport implements PromocionDAO{

	@Autowired
	public PromocionDAOImpl(DataSource dataSource) {
		setDataSource(dataSource);
	}
	

	public Promocion consultarPromocion(Integer id) {
		return getSimpleJdbcTemplate().queryForObject(
				"select id, aereolinea, origen, destino, precioPromocionSol, precioPromocionDol, " +
				"fechaValidezDesde, fechaValidezHasta from promociones where id=?",
				new BeanPropertyRowMapper<Promocion>(Promocion.class), id);
	}

	public List<Promocion> consultarPromociones() {
		return getSimpleJdbcTemplate().query(
				"select id, aereolinea, origen, destino, precioPromocionSol, precioPromocionDol, " +
						"fechaValidezDesde, fechaValidezHasta from promociones",
				new BeanPropertyRowMapper<Promocion>(Promocion.class));
	}

	@Override
	public void registrarPromocion(Promocion promocion) {
		getJdbcTemplate().update(
				"insert into promociones (aereolinea, origen, destino, precioPromocionSol, precioPromocionDol, " +
				"fechaValidezDesde, fechaValidezHasta) values(?, ?, ?, ?, ?, ?, ?)",
				promocion.getAereolinea(), promocion.getOrigen(), promocion.getDestino(), promocion.getPrecioPromocionSol(), promocion.getPrecioPromocionDol(),
				promocion.getFechaValidezDesde(), promocion.getFechaValidezHasta());
		// Setear el id autogenerado por el identity de HSQL
		promocion.setId(getSimpleJdbcTemplate().queryForInt("call identity()"));
	}

	@Override
	public void actualizarPromocion(Promocion promocion) {
		getSimpleJdbcTemplate().update(
				"update promociones set aereolinea=?, origen=?, destino=?, precioPromocionSol=?, " +
				"precioPromocionDol=?, " +
				"fechaValidezDesde=?, fechaValidezHasta=?",
				promocion.getAereolinea(), promocion.getOrigen(), promocion.getDestino(), promocion.getPrecioPromocionSol(), promocion.getPrecioPromocionDol(),
				promocion.getFechaValidezDesde(), promocion.getFechaValidezHasta());
	}

	@Override
	public void eliminarPromocion(Integer id) {
		getSimpleJdbcTemplate().update("delete from promociones where id=?", id);
	}


	@Override
	public List<Promocion> consultarPromocionesPorFechaOrigenDestino(Date fecha,
			String origen, String destino) {
		return getSimpleJdbcTemplate().query(
				"select id, aereolinea, origen, destino, precioPromocionSol, precioPromocionDol, " +
						"fechaValidezDesde, fechaValidezHasta from promociones" +
						"where origen=? and destino=? and fechaOrigen=?",
				new BeanPropertyRowMapper<Promocion>(Promocion.class), origen, destino, fecha);
	}	
	
	@Override
	public List<Promocion> consultarPromocion(String aerolinea, String origen,
			String destino) {
		// TODO Auto-generated method stub
		//SimpleDateFormat formato = new SimpleDateFormat("yyyy-MM-dd");
		//Date xxx= new Date();
		//Date dteFecIni=new Date();
		//Date dteFecFin=new Date();
		//try {
		//	if(!fecvueini.equals("XXX")) dteFecIni = formato.parse(fecvueini);
		//	if(!fecvuefin.equals("XXX")) dteFecFin = formato.parse(fecvuefin);
		//} catch (ParseException e) {
			// TODO Auto-generated catch block
		//	e.printStackTrace();
		//} 
		
		//System.out.println(dteFecIni);
//		System.out.println(aerolinea);
//		System.out.println(formato.format(fecvueini));
		String qAerolinea="";
		String qOrigen="";
		String qDestino="";
		//String qFecvueini="";
		//String qFecvuefin="";
		String Query="";
		

		if (aerolinea.equals("XXX"))
			qAerolinea = " where 1=1";
		else
			qAerolinea = " where aereolinea='" + aerolinea+"'";

		if (origen.equals("XXX"))
			qOrigen = "";
		else
			qOrigen = " and origen='" + origen+"'";
		if (destino.equals("XXX"))
			qDestino = "";
		else
			qDestino = " and destino='" + destino+"'";

		//if (fecvueini.equals("XXX"))
		//	qFecvueini = "";
		//else
		//	qFecvueini = " and fechaOrigen='" + formato.format(dteFecIni)+"'";
		//if (fecvuefin.equals("XXX"))
		//	qFecvuefin = "";
		//else
		//	qFecvuefin = " and fechaDestino='" + formato.format(dteFecFin)+"'";

		//System.out.println(qAerolinea);
		
		Query="select id, aereolinea, origen, destino, "
				+ "precioPromocionSol, precioPromocionDol, fechaValidezDesde, fechaValidezHasta from promociones"
				+ qAerolinea
				+ qOrigen
				+ qDestino;
		
		System.out.println(Query);
		
		return getSimpleJdbcTemplate()
				.query(Query,
						new BeanPropertyRowMapper<Promocion>(Promocion.class));
	}	
}
